/**
 *@param {array} position  是一个二维数组 [[114,30],[114,40]]
 *@param {array} attr ['长江',18] 数组
 *@param {object} service  {name,layerId}
 */

function addLine({ position, attr, service, docLayer }) {
  /* 1、创建zondy 的要素， new*/
  //1-1 几何
  //构成线要素的点
  var pointObj = new Array()
  for (let item of position) {
    pointObj.push(new Zondy.Object.Point2D(item[0], item[1]))
  }

  //构成折线的弧段
  var gArc = new Zondy.Object.Arc(pointObj)
  //构成线的折线
  var gAnyLine = new Zondy.Object.AnyLine([gArc])
  //设置线要素的几何信息
  var gline = new Zondy.Object.GLine(gAnyLine)
  //设置要素的几何信息
  var fGeom = new Zondy.Object.FeatureGeometry({ LinGeom: [gline] })
  //1-2
  //设置添加线要素的图形参数信息
  var clineInfo = new Zondy.Object.CLineInfo({
    Color: 1, //颜色
    LinStyleID: 0,
    LinStyleID2: 22,
    LinWidth: 0.05,
    Xscale: 10,
    Yscale: 10,
  })
  //设置要素的图形参数信息
  var graphicInfo = new Zondy.Object.WebGraphicsInfo({
    InfoType: 2,
    LinInfo: clineInfo,
  })
  //1-3
  //设置添加线要素的属性信息
  var attValue = attr.map((item) => item.value)

  //创建一个线要素
  var newFeature = new Zondy.Object.Feature({
    fGeom: fGeom,
    GraphicInfo: graphicInfo,
    AttValue: attValue,
  })
  //设置要素为线要素
  newFeature.setFType(2)

  //2 创建要素集

  //创建一个要素数据集
  var featureSet = new Zondy.Object.FeatureSet()
  //创建属性结构设置对象
  var cAttStruct = new Zondy.Object.CAttStruct({
    FldName: attr.map((item) => item.key),
    FldNumber: 0,
    FldType: attr.map((item) => item.type),
  })
  //设置要素数据集的树形结构
  featureSet.AttStruct = cAttStruct
  //将添加的线要素添加到属性数据集中
  featureSet.addFeature(newFeature)
  //3调用服务添加要素集
  //创建一个地图编辑对象
  var editDocFeature = new Zondy.Service.EditDocFeature(
    service.name,
    service.layerId,
    {
      ip: "localhost",
      port: "6163", //访问IGServer的端口号，.net版为6163，Java版为8089
    }
  )
  editDocFeature.add(featureSet, onLineSuccess(docLayer))
}
//添加线要素回调函数
function onLineSuccess(docLayer) {
  return function (result) {
    if (result) {
      // alert("添加线要素成功！")
      // docLayer.value.refresh()
    } else {
      alert("添加线要素失败！")
    }
  }
}
export { addLine }
